/*******************************************************************************
 Discription    :    功能说明:    1) 三个按键
                               2) 支持 短按/长按/长长按/长长长按, 两个按键实现12个键值.
                                         性能说明:    1) 调用获取按键时参数决定是否要阻塞,阻塞会导致任务被挂起.
                               2) 直接调用获取键值,不需要管其它任何东西.
 InputDepend    :    Timer interrupt tick(系统 或者 是硬件timer)
 Author        : 练达荣  Davin.Lien
 Version        : V1.0.0
 Date        : 2021/10/30
 History        :
 *******************************************************************************/
#ifndef __KEY_H_
#define __KEY_H_

typedef enum
{
    KeyC_NoKey,

    KeyC_S2_Short, KeyC_S3_Short, KeyC_S2S3_Short, KeyC_S4_Short, KeyC_S2S4_Short, KeyC_S3S4_Short, KeyC_S2S3S4_Short,  // short key

    KeyC_S2_L, KeyC_S3_L, KeyC_S2S3_L, KeyC_S4_L, KeyC_S2S4_L, KeyC_S3S4_L, KeyC_S2S3S4_L,                              // L key

    KeyC_S2_LL, KeyC_S3_LL, KeyC_S2S3_LL, KeyC_S4_LL, KeyC_S2S4_LL, KeyC_S3S4_LL, KeyC_S2S3S4_LL,                       // LL key

    KeyC_S2_LLL, KeyC_S3_LLL, KeyC_S2S3_LLL, KeyC_S4_LLL, KeyC_S2S4_LLL, KeyC_S3S4_LLL, KeyC_S2S3S4_LLL,                // LLL key
} TE_KeyCode;

#define debug_StopAndInfo(condTrue,info)    while((condTrue))    {rt_kprintf(info);rt_kprintf("\n"); rt_thread_mdelay(2000);}

void key_Init(void);
TE_KeyCode key_GetCode(rt_uint32_t overT_ms);
void test_key(void);


// -------------------- for 更好的显示演示 ------------------------------------------
typedef struct
{
    TE_KeyCode kcode;
    const char *keyName;
}T_DisplayKey;




#endif

